from PyQt5 import QtCore, QtGui, QtWidgets
from main import DateTime  # 导入DateTime类，假设它定义在main.py中

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()  # 调用基类构造方法
        self.setupUi()  # 初始化UI

    def setupUi(self):
        self.setObjectName("MainWindow")  # 设置主窗口的对象名
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)  # 设置窗口无边框且始终保持在最前
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)  # 设置窗口背景透明
        self.setWindowOpacity(0.5)  # 设置窗口的不透明度为0.5
        self.setGeometry(1480, 20, 300, 120)  # 设置窗口的初始位置和大小

        # 设置窗口图标
        icon = QtGui.QIcon("D:\worker\PythonProject\date_project\\favicon.ico")  # 图标文件路径
        self.setWindowIcon(icon)  # 设置窗口图标

        self.centralwidget = QtWidgets.QWidget(self)  # 创建一个中心部件
        self.centralwidget.setObjectName("centralwidget")  # 设置中心部件的对象名

        # 创建并设置第一个垂直布局，用于显示时间信息
        self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(80, 0, 151, 51))  # 设置布局的位置和大小
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)  # 布局内容的边缘为空

        # 创建时间标签
        self.label_time = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label_time.setAlignment(QtCore.Qt.AlignCenter)  # 标签居中对齐
        self.label_time.setStyleSheet("font-size: 26px;")  # 设置字体大小
        self.verticalLayout.addWidget(self.label_time)  # 添加到布局中

        # 创建并设置第二个垂直布局，用于显示日期信息
        self.verticalLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(40, 50, 121, 31))
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)

        # 创建日期标签
        self.label_date = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        self.label_date.setAlignment(QtCore.Qt.AlignCenter)  # 标签居中对齐
        self.label_date.setStyleSheet("font-size: 20px;")  # 设置字体大小
        self.verticalLayout_2.addWidget(self.label_date)  # 添加到布局中

        # 创建并设置第三个垂直布局，用于显示星期信息
        self.verticalLayoutWidget_3 = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget_3.setGeometry(QtCore.QRect(160, 50, 101, 31))
        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_3)
        self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)

        # 创建星期标签
        self.label_week = QtWidgets.QLabel(self.verticalLayoutWidget_3)
        self.label_week.setAlignment(QtCore.Qt.AlignCenter)  # 标签居中对齐
        self.label_week.setStyleSheet("font-size: 20px;")  # 设置字体大小
        self.verticalLayout_3.addWidget(self.label_week)  # 添加到布局中

        # 设置中央控件
        self.setCentralWidget(self.centralwidget)

        # 设置菜单栏
        self.menubar = QtWidgets.QMenuBar(self)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 311, 23))
        self.setMenuBar(self.menubar)

        # 设置状态栏
        self.statusbar = QtWidgets.QStatusBar(self)
        self.setStatusBar(self.statusbar)

        # 初始化并更新界面显示的日期、时间和星期信息
        self.update_datetime()

        # 调用翻译函数，通常用于国际化支持，但在这个例子中可能未使用
        self.retranslateUi()

        # 将内部对象转换为连接对象，通常用于自动连接信号与槽
        QtCore.QMetaObject.connectSlotsByName(self)

        self.installEventFilter(self)  # 安装事件过滤器，用于处理窗口的鼠标拖动等事件

    def retranslateUi(self):
        _translate = QtCore.QCoreApplication.translate
        self.setWindowTitle(_translate("MainWindow", "MainWindow"))  # 设置窗口标题

    def update_datetime(self):
        # 创建 DateTime 实例，用于获取当前日期、时间和星期
        d = DateTime()

        # 获取并更新日期、时间和星期信息
        date = d.get_date()
        time = d.get_time()
        week = d.get_week()

        # 更新界面上的标签文本
        self.label_date.setText(f"{date}")
        self.label_time.setText(f"{time}")
        self.label_week.setText(f"{week}")

    # 鼠标按下事件，记录鼠标相对于窗口的位置
    def mousePressEvent(self, event):
        if event.button() == QtCore.Qt.LeftButton:
            self.dragPos = event.globalPos() - self.frameGeometry().topLeft()
            event.accept()

    # 鼠标移动事件，允许用户拖动窗口
    def mouseMoveEvent(self, event):
        if hasattr(self, 'dragPos'):
            newPos = event.globalPos() - self.dragPos
            self.move(newPos)
            event.accept()

    # 鼠标释放事件，结束窗口的拖动
    def mouseReleaseEvent(self, event):
        if hasattr(self, 'dragPos'):
            del self.dragPos
            event.accept()

# 主程序入口
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)  # 创建应用实例

    mainWindow = MainWindow()  # 创建主窗口实例

    # 设置窗口的背景颜色为白色，并调整透明度
    mainWindow.setStyleSheet("background-color: rgba(255, 255, 255, 0);")

    mainWindow.show()  # 显示主窗口

    # 创建定时器，每秒更新一次界面显示的日期、时间和星期信息
    timer = QtCore.QTimer()
    timer.timeout.connect(mainWindow.update_datetime)
    timer.start(1000)  # 定时器每1000毫秒（即每秒）触发一次

    sys.exit(app.exec_())  # 运行应用并等待退出